package Test32;

//TreeSet对象排序练习题

//TreeSet底层是红黑树结构

import java.util.TreeSet;

/*需求:
    创建TreeSet集合，并添加3个学生对象
    学生对象属性:
    姓名，年龄。
    要求按照学生的年龄进行排序
    同年龄按照姓名字母排列（暂不考虑中文）
    同姓名，同年龄认为是同一个人

    方式一:
        默认的排序规则/自然排序
        student实现comparable接口，重写里面的抽象方法，再指定比较规则
 */
public class Test20 {
    public static void main(String[] args) {

        //1、创建集合
        TreeSet<Student20> ts = new TreeSet<>();

        //2、创建学生对象
        Student20 s1 = new Student20("zhangsan", 23);
        Student20 s2 = new Student20("lisi", 24);
        Student20 s3 = new Student20("wangwu", 25);
        Student20 s4 = new Student20("zhaoliu", 26);

        //3、添加元素
        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);

        //4、打印集合
        System.out.println(ts);
    }
}

class Student20 implements Comparable<Student20> {
    private String name;
    private int age;


    public Student20() {
    }

    public Student20(String name, int age) {
        this.name = name;
        this.age = age;
    }

    /**
     * 获取
     *
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     *
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     *
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     *
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }

    @Override
    //this:表示当前要添加的元素
    //o:表示已经在红黑树存在的元素

    //返回值:
    //负数:表示当前要添加的元素是小的，存左边
    //正数:表示当前要添加的元素是大的，存右边
    //0:表示当前要添加的元素已经存在，舍弃

    public int compareTo(Student20 o) {
        System.out.println("------------");
        System.out.println("this：" + this);
        System.out.println("o：" + o);
        //指定排序的规则
        //只看年龄，我想要按照年龄的升序进行排列
        return this.getAge() - o.getAge();
    }
}
